package fr.cpe.dp.projet2.main;

import fr.cpe.dp.projet2.rmi.IRmiMusicService;
import fr.cpe.dp.projet2.rmi.server.RmiServerMusicService;
import fr.cpe.dp.projet2.rmi.service.RmiStep1MusicService;
import fr.cpe.dp.projet2.rmi.service.RmiStep2MusicService;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Benoit
 */
public class Step3RmiServer {
    public static void main(String [] args) {
        try {
//            System.out.println("Mise en place du Security Manager ...");
//            if(System.getSecurityManager() == null) {
//                System.out.println("Security manager mis en place");
//                System.setSecurityManager(new RMISecurityManager());
//            }
            LocateRegistry.createRegistry(1099);
            System.out.println("Le RMI registry est prêt.");
        } catch (RemoteException ex) {
            System.out.println("Le RMI registry n'a pas démmaré correctement.");
            Logger.getLogger(Step3RmiServer.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
        try {
            HashMap<String, IRmiMusicService> listeServices = new HashMap<String, IRmiMusicService>();
            listeServices.put("Lecture sans IHM", new RmiStep1MusicService());
            listeServices.put("Lecture avec IHM", new RmiStep2MusicService());
            
            Naming.rebind("RmiMusicService", new RmiServerMusicService(listeServices));
            System.out.println("Le service distant s'exécute"); 
        } catch (RemoteException | MalformedURLException ex) {
            System.out.println("Impossible de binder le nom du serveur RMI");
            Logger.getLogger(Step3RmiServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
